淺談 ORM


Posted by Wangpoching on 2021-10-06

有沒有覺得 SQL 的語法很麻煩,不同的資料庫有不同的 SQL 語法,對資料庫不外乎進行新增、查詢、編輯、刪除,有甚麼方法可以降低程式與資料庫之間的耦合關係或者簡化 SQL 的語法嗎? 有的,它就是所謂的 ORM。

甚麼是 ORM

Object-Relational Mapping (ORM)是將關聯式資料庫映射至物件導向的資料抽象化技術,對這個物件進行新增、查詢、編輯、刪除,底層的實作會使用相對應的 SQL 語法去操作資料庫。此時程式設計師不用再去管料庫是使用哪一種類型(如:SQL Server、Oracle、DB2、MySQL、Sybase...),同一套語法便可以了,這便是因為 ORM 為程式設計師還有資料庫之間搭起了一道橋樑。

也許這麼想 ORM 會更好,它就像一個翻譯,原本你必須會資料庫的語言,用資料庫的語言跟資料庫溝通,但有了 ORM,你可以將需求用你熟悉的物件導向程式語言告訴 ORM,ORM 再用資料庫的語言將你的請求翻譯給資料庫。

img

ORM 的優點

  1. ORM 可以防止 SQL-Injection 的攻擊
  2. 方便轉移資料庫,當資料庫發生改變時,只需要修改映射關係即可
  3. 不用考慮該死的 SQL 語句,語法簡化
  4. 通用性:

舉例來說下面這兩個 MySQL、MsSQL 的語法做的其實是一樣的事情

// MySQL
SELECT * FROM Menu WHERE price=100 LIMIT 10
// MsSQL
SELECT TOP 10 * FROM TestTable WHERE price=100

ORM 的缺點

  1. 對於複雜的查詢,ORM 的使用上支援度不好,可能還要額外寫入原生的 SQL 語法。
  2. 延伸上一個缺點,使用 ORM 的使用者在需要用到 SQL 語法的時候經常不熟練。

看到一個有趣的關於 Ruby 案例是這樣子的,這便是額外使用原生 SQL 語法的案例。

User.where(“age between ? and ?”,10,30)

#ORM #MSSQL #MySQL







Related Posts

.Net MVC authorization Controller and Workcontext extension in razor view

.Net MVC authorization Controller and Workcontext extension in razor view

TypeScript 函式定義字串型別相連和JavaScript String.prototype.concat() 的差異

TypeScript 函式定義字串型別相連和JavaScript String.prototype.concat() 的差異

Colorful Glowing

Colorful Glowing


Comments